/*
*    Author : heiden deng(dengjianquan@beyondcent.com)
*    2017/07/11
*    version 0.0.9
*    consumer项目提供的接口函数
*/

#ifndef HTSC_CONSUMER_INTF_H
#define HTSC_CONSUMER_INTF_H

#include "htsc_common/htsc_types.h"

#ifdef __cplusplus
extern "C" {
#endif

//判断是否是请求负载均衡，否则是连接负载均衡
bool is_request_loadbalance();

//手动根据服务名查询provider，更新缓存
void get_all_providers_by_name(const char*service_name);

//根据服务名查询provider，返回provider_t数组
provider_t* consumer_query_providers(const char *service_name, int *nums);

//consumer注册，返回注册的url串。
char *htsc_grpc_consumer_register(const char *fullmethod);

//consumer取消注册。
int htsc_grpc_consumer_unregister(char * reginfo);

//从target中提取出服务名，返回空间需要释放,例如zookeeper:///com.htsc.grpc.hello.greeter返回
//com.htsc.grpc.hello.greeter
char* htsc_grpc_get_sn_from_target(char* target);

//标记clientId(注册时填写的信息)调用providerId(provider_ip:provider_port)失败信息
void record_provider_failure(char* clientId, char* providerId);

//获取经过黑白名单处理之后用于负载均衡的provider数量
int get_consumer_lb_providers_acount(char *service_name);

//获取zk上某服务的provider数量
int get_consumer_providers_acount(char* service_name);

//设置某个provider 调用失败标记
void set_provider_failover_flag(char* service_name, char *providerId);

//清除某个provider 调用失败标记
void clr_provider_failover_flag(char* service_name, char *providerId);

//设置服务在单位时间内被访问的次数
void set_consmuer_flow_control_threshold(char *service_name, long max_request);

//检查客户端对某个服务的单位时间内的请求计数，如果超过最大值则返回false,否则增加计数并返回true
bool check_consumer_flow_control(char *service_name);

//检查对某个服务的请求计数
void decrease_consumer_request_count(char *service_name);

#ifdef __cplusplus
}
#endif

#endif // !HTSC_CONSUMER_INTF_H



